/**   
 *  session 的使用
 *  1、npm install express-session --save
 * 
 *  2、const session = require('express-session')
 * 
 *  3、配置 session 的中间件
 *  app.use(session({
      secret: 'keyboard cat', // 服务器端生成 session 的签名
      name: 'itying', // 修改 session 对应的 cookie名称
      resave: false, // 强制保存 session 即使它并没有变化
      saveUninitialized: true, // 强制将未初始化的 session 存储
      cookie: {
        maxAge: 1000 * 60 * 60,
        secure: false // true 表示只有 https 协议才能访问到 cookie
      },
      rolling: true // 在每次请求时强行设置 cookie，这将重置 cookie 过期时间（默认：false）
    }))

    4、使用
      // 设置 session
      req.session.username = '张三'
      // 获取
      req.session.username



      5、session 保存在数据库里
       -  配置 express-session
       -  安装 connect-mongo    npm i connect-mongo --save
       -  引入： const MongoStore = require('connect-mongo')
       -  配置中间件

       // 配置 session 的中间件
        app.use(session({
          secret: 'keyboard cat', // 服务器端生成 session 的签名
          name: 'itying', // 修改 session 对应的 cookie名称
          resave: false, // 强制保存 session 即使它并没有变化
          saveUninitialized: true, // 强制将未初始化的 session 存储
          cookie: {
            maxAge: 1000 * 60 * 60,
            secure: false // true 表示只有 https 协议才能访问到 cookie
          },
          rolling: true, // 在每次请求时强行设置 cookie，这将重置 cookie 过期时间（默认：false）
          store: MongoStore.create({
            mongoUrl: 'mongodb://localhost/sessionDB',
            touchAfter: 24 * 3600 // 不管发出了多少请求 在 24小时内只更新一次 session 除非你改变了这个session
        })
}))
 * 
*/

const express = require('express')

const session = require('express-session')

const MongoStore = require('connect-mongo')  // 或者可以保存到 redis 里

// const redisStore = require('connect-redis')

const app = express()

// 配置 session 的中间件
app.use(session({
  secret: 'keyboard cat', // 服务器端生成 session 的签名
  name: 'itying', // 修改 session 对应的 cookie名称
  resave: false, // 强制保存 session 即使它并没有变化
  saveUninitialized: true, // 强制将未初始化的 session 存储
  cookie: {
    maxAge: 1000 * 60 * 60,
    secure: false // true 表示只有 https 协议才能访问到 cookie
  },
  rolling: true, // 在每次请求时强行设置 cookie，这将重置 cookie 过期时间（默认：false）
  store: MongoStore.create({
    mongoUrl: 'mongodb://localhost/sessionDB',
    touchAfter: 24 * 3600 // 不管发出了多少请求 在 24小时内只更新一次 session 除非你改变了这个session
  })
}))

app.get('/', (req, res) => {
  // 获取 session
  if (req.session.username) {
    res.send(req.session.username + '-已登录')
    return
  }
  res.send('未登录')
})

app.get('/login', (req, res) => {
  // 设置 session
  req.session.username = '张三'
  res.send('登录')
})

app.get('/loginOut', (req, res) => {
  // 1、设置 session 的过期时间为 0 (它会把 所有的 session 都销毁，)
  // req.session.cookie.maxAge = 0

  // 2、销毁指定 session
  // req.session.username = ""

  // 3、销毁 session destroy
  req.session.destroy()
  res.send('登出')
})

app.listen(3000)